package com.zzl.bonds.ticket.feign;

import com.zzl.apidoc.annotation.ApidocOperation;
import com.zzl.apidoc.annotation.ApidocParam;
import com.zzl.bonds.ticket.dto.feign.*;
import com.zzl.bonds.ticket.entity.feign.AddressBookEntity;
import com.zzl.general.common.apidoc.annotation.ApidocReturnR;
import com.zzl.general.common.feign.config.FeignClientsConfig;
import com.zzl.general.common.feign.dto.Enterprise;
import com.zzl.general.common.requestparameter.Ids;
import com.zzl.general.common.requestparameter.StringIds;
import com.zzl.general.common.utils.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;
import java.util.Map;

/**
 * rpc 接口
 *
 * @author : spp
 * @date : 2021/11/19 14:23
 */
@FeignClient(value = "data", configuration = FeignClientsConfig.class)
public interface BaseDataFeign {

    /**
     * 获取所有的 金融机构
     *
     * @return 返回 金融机构的 数据
     */
    @GetMapping("data/feign/listFinanceInstituty")
    List<FinanceInstitutyEntity> listFinanceInstituty();


    /**
     * 通过 企业id 获取企业信息
     *
     * @param ids 企业id 集合
     * @return 企业信息
     */
    @PostMapping("data/feign/listEnterpriseByEnterpriseIds")
    List<Enterprise> getEnterPriseByIds(StringIds ids);

    /**
     * 企业名称模糊搜索企业
     *
     * @param enterpriseName 企业名称
     * @return 企业列表
     */
    @GetMapping("data/feign/listByEnterpriseName/{enterpriseName}")
    List<Enterprise> listByEnterpriseName(@ApidocParam(name = "enterpriseName", required = true) @PathVariable("enterpriseName") String enterpriseName);

    /**
     * 根据金融产品id和我的票据id计算融资数据
     * 包括预计放款金额、融资成本、融资成本组成等信息
     */
    @PostMapping("data/feign/financial/product/{productId}")
    FinancialProductEntity financialProductById(@ApidocParam(name = "金融产品id", required = true)
                                                @PathVariable("productId") String productId);

    /**
     * 通过金融机构ids查询金融机构及关联金融产品
     */
    @PostMapping("data/feign/listAllFinanceInstitutyAndProduct")
    List<FinanceInstitutyIncludeProductDto> listAllFinanceInstitutyAndProduct(@RequestBody Ids ids);

    /**
     * 查询银行账号对象值
     */
    @GetMapping("data/feign/getBankAccountFeign/{id}")
    BankAccountEntity getBankAccountFeign(@PathVariable(value = "id") String id);

    /**
     * 通过金融机构ids查询金融机构及关联金融产品
     *
     * @param ticketMap 票据对象数据
     * @return 金融产品计算结果
     */
    @PostMapping("data/feign/calcInstitutyAndProduct")
    Result calcInstitutyAndProduct(@RequestBody Map<String, Object> ticketMap);

    /**
     * 保存银行信息
     *
     * @param accountAddDto 银行参数
     * @return 返回值
     */
    @PostMapping("data/feign/saveBankAccountFeign")
    @ApidocOperation(description = "保存", operationId = "bankAccountSave1")
    @ApidocReturnR
    Result save(@ApidocParam(name = "保存的对象值", required = true) @RequestBody BankAccountFeignAddDto accountAddDto);

    /**
     * 查询所有核心企业接口
     *
     * @return 核心企业集合
     */
    @GetMapping("/data/feign/getCoreEnterpriseList")
    @ApidocOperation(description = "查询所有核心企业接口", operationId = "data/feign/getCoreEnterpriseList")
    @ApidocReturnR
    List<Enterprise> getCoreEnterpriseList();

    @GetMapping("/data/feign/getAddressBookByIds")
    @ApidocOperation(description = "查询所有核心企业接口", operationId = "data/feign/getCoreEnterpriseList")
    @ApidocReturnR
    List<AddressBookEntity> getAddressByIds(@RequestBody List<String> ids);

    /**
     * 通过金融机构ids查询金融机构
     */
    @PostMapping("/data/feign/listFinanceInstitutyByIds")
    @ApidocOperation(description = "通过金融机构ids查询金融机构", operationId = "addressBook13123")
    List<FinanceInstitutyEntity> listFinanceInstitutyByIds(@RequestBody StringIds ids);

    /**
     * 获取企业统一信用代码
     *  key id
     *  value socialCreditCode
     */
    @PostMapping("/data/feign/getSocialCreditCode")
    Map<String,String> getSocialCreditCode(@RequestBody StringIds ids);
}
